package com.chj;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.chj.service.UserService;
import com.chj.service.UserServiceApi;

import java.io.IOException;


/**
 * api的方式调用
 * api的方式调用不需要其他的配置，只需要下面的代码即可。
 * 但是需要注意，官方建议：
 * Api方式用于测试用例使用，推荐xml的方式
 */
public class ConsumerAppApi {
    public static void main(String[] args) throws IOException {
        //TODO 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("dubbo-store-consumer");
        application.setOwner("hankin");

        // TODO 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://127.0.0.1:2181");

        // TODO 注意：ReferenceConfig为重对象，内部封装了与注册中心的连接，以及与服务提供方的连接

        // TODO 引用远程服务
        // TODO 此实例很重，封装了与注册中心的连接以及与提供者的连接，请自行缓存，否则可能造成内存和连接泄漏
        ReferenceConfig<UserServiceApi> reference = new ReferenceConfig<UserServiceApi>();
        reference.setApplication(application);
        reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
        reference.setInterface(UserServiceApi.class);

        // TODO 和本地bean一样使用xxxService
        //TODO  注意：此代理对象内部封装了所有通讯细节，对象较重，请缓存复用
        UserServiceApi userServiceApi = reference.get();
        String result = userServiceApi.getDetail("1");
        System.out.println("cusumer get=="+result);
        System.out.println("-----dubbo开启-----");
        System.in.read(); // 为保证服务一直开着，利用输入流的阻塞来模拟
    }
}
